package com.partsoft.dits.utils;

import org.springframework.util.ClassUtils;

import com.partsoft.dits.EdgeDescriptor;
import com.partsoft.dits.EdgeException;
import com.partsoft.dits.log.Log;


public abstract class EdgeLogUtils {
	
	public static void info(EdgeDescriptor desc, String message) {
		Log.info(message, new EdgeException(desc, String.format("%s:%s", desc.toString(), message)));
	}
	
	public static void info(EdgeDescriptor desc, Throwable e) {
		if (ClassUtils.isAssignableValue(EdgeException.class, e)) {
			Log.info(e.getMessage(), e);
		} else {
			Log.info(e.getMessage(), new EdgeException(desc,  String.format("%s:%s", desc.toString(), e.getMessage())));
		}
	}
	
	public static void error(EdgeDescriptor desc, String message) {
		Log.error(message, new EdgeException(desc, String.format("%s:%s", desc.toString(), message)));
	}
	
	public static void error(EdgeDescriptor desc, Throwable e) {
		if (ClassUtils.isAssignableValue(EdgeException.class, e)) {
			Log.error(e.getMessage(), e);
		} else {
			Log.error(e.getMessage(), new EdgeException(desc,  String.format("%s:%s", desc.toString(), e.getMessage())));
		}
	}

	
	public static void warn(EdgeDescriptor desc, String message) {
		Log.warn(message, new EdgeException(desc, String.format("%s:%s", desc.toString(), message)));
	}
	
	public static void warn(EdgeDescriptor desc, Throwable e) {
		if (ClassUtils.isAssignableValue(EdgeException.class, e)) {
			Log.warn(e.getMessage(), e);
		} else {
			Log.warn(e.getMessage(), new EdgeException(desc,  String.format("%s:%s", desc.toString(), e.getMessage())));
		}
	}
	
	public static void fatal(EdgeDescriptor desc, String message) {
		Log.error(message, new EdgeException(desc, String.format("%s:%s", desc.toString(), message)));
	}
	
	public static void fatal(EdgeDescriptor desc, Throwable e) {
		if (ClassUtils.isAssignableValue(EdgeException.class, e)) {
			Log.fatal(e.getMessage(), e);
		} else {
			Log.fatal(e.getMessage(), new EdgeException(desc,  String.format("%s:%s", desc.toString(), e.getMessage())));
		}
	}
	
	
	public static void debug(EdgeDescriptor desc, String message) {
		Log.debug(message, new EdgeException(desc, String.format("%s:%s", desc.toString(), message)));
	}
	
	public static void debug(EdgeDescriptor desc, Throwable e) {
		if (ClassUtils.isAssignableValue(EdgeException.class, e)) {
			Log.debug(e.getMessage(), e);
		} else {
			Log.debug(e.getMessage(), new EdgeException(desc,  String.format("%s:%s", desc.toString(), e.getMessage())));
		}
	}
	
}
